package homework4;

import tester.Tester;

public class Examples {

	SameSize<Integer> sameSize = new SameSize<Integer>();
	ContainsAllElts<Integer> containAll = new ContainsAllElts<Integer>();

	GEmptyList<IListTest<Integer>> emptyTestList = new GEmptyList<IListTest<Integer>>();
	IGList<IListTest<Integer>> testCases1 = new GList<IListTest<Integer>>(
			sameSize, emptyTestList);
	IGList<IListTest<Integer>> testCases2 = new GList<IListTest<Integer>>(
			containAll, testCases1);
	Checker<Integer> checker = new Checker<Integer>(testCases2);

	Integer item1 = new Integer(500);
	Integer item2 = new Integer(200);
	Integer item3 = new Integer(900);
	Integer item4 = new Integer(10000);
	Integer item5 = new Integer(1);
	GEmptyList<Integer> gEmptyList = new GEmptyList<Integer>();
	GList<Integer> gList1 = new GList<Integer>(item1, gEmptyList);
	GList<Integer> gList2 = new GList<Integer>(item2, gList1);
	GList<Integer> gList3 = new GList<Integer>(item3, gList2);
	GList<Integer> gList4 = new GList<Integer>(item4, gList3);
	GList<Integer> gList5 = new GList<Integer>(item5, gList4);

	Integer aitem1 = new Integer(1);
	Integer aitem2 = new Integer(200);
	Integer aitem3 = new Integer(500);
	Integer aitem4 = new Integer(900);
	Integer aitem5 = new Integer(10000);
	GEmptyList<Integer> agEmptyList = new GEmptyList<Integer>();
	GList<Integer> agList1 = new GList<Integer>(aitem1, agEmptyList);
	GList<Integer> agList2 = new GList<Integer>(aitem2, agList1);
	GList<Integer> agList3 = new GList<Integer>(aitem3, agList2);
	GList<Integer> agList4 = new GList<Integer>(aitem4, agList3);
	GList<Integer> agList5 = new GList<Integer>(aitem5, agList4);

	public void testLists(Tester t) {
		t.checkExpect(checker.run(gList5, agList5), true);
		t.checkExpect(checker.run(gList5, agList4), false);

		t.checkExpect(containAll.run(gList5, agList5), true);

		t.checkExpect(containAll.run(gList5, agList4), false);
		t.checkExpect(containAll.run(agList4, gList5), true);
	}

	public static void main(String[] args) {
		Tester.run(new Examples());
	}
}
